home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / dev / src / ConfigFileSrc.lha / ConfigFileSrc12 / ClearUpFile / ClearUpFile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-02  |  3.3 KB  |  130 lines

  1. /*
  2. **  $PROJECT: ClearUpFile
  3. **
  4. **  $VER: ClearUpFile.c 2.4 (2.10.97)
  5. **
  6. **  (C) Copyright 1996-1997 Marcel Karas
  7. **      All Rights Reserved.
  8. **
  9. **  $HISTORY:
  10. **
  11. **  0.1  10.11.96 -- Inital first version.
  12. **  1.0  10.11.96 -- First bug free version.
  13. **  1.1  16.11.96 -- Changed Header->WBufLength to 16384.
  14. **  1.2  05.12.96 -- First public version.
  15. **  1.3  06.01.97 -- Changed Header->WBufLength to 32768.
  16. **  2.0  04.02.97 -- Needs and uses now ConfigFile.library V2.
  17. **                -- Opens a file now with cf_OpenPS() and a puddlesize 
  18. **                   of 32768 bytes.
  19. **  2.1  11.02.97 -- Added the new cf_Open() errorcodes.
  20. **  2.2  12.02.97 -- Removed the stuff Printf() call by an
  21. **                   OpenLibrary("dos.library", 36L) failure.
  22. **  2.3  16.02.97 -- Optimized code.
  23. **  2.4  02.10.97 -- Recompiled for public release.
  24. */
  25.  
  26. #include <exec/types.h>
  27. #include <exec/libraries.h>
  28. #include <dos/rdargs.h>
  29. #include <dos/dos.h>
  30.  
  31. #include <clib/exec_protos.h>
  32. #include <clib/dos_protos.h>
  33.  
  34. #include <pragmas/exec_sysbase_pragmas.h>
  35. #include <pragmas/dos_pragmas.h>
  36.  
  37. #include "OLibTagged.h"
  38.  
  39. #include <Libraries/ConfigFile.h>
  40. #include <CLib/ConfigFile_protos.h>
  41. #include <Pragmas/ConfigFile_pragmas.h>
  42.  
  43. struct Library *DOSBase;
  44. struct Library *SysBase;
  45. struct Library *CFBase;
  46.  
  47. enum { ARG_FILE ,ARG_MAX };
  48.  
  49. VOID PrintErr ( STRPTR );
  50.  
  51. ULONG start ( VOID )
  52. {
  53.     struct RDArgs *RDA;
  54.     LONG ArgAry[ARG_MAX] = { 0 };
  55.  
  56.     ULONG Result    = RETURN_ERROR, WMode;
  57.     ULONG Error        = 0;
  58.  
  59.     CFHeader *Header;
  60.  
  61.     if ( DOSBase = TaggedOpenLibrary (TLIB_DOS) )
  62.     {
  63.         if ( CFBase = OpenLibrary (CF_NAME, 2L) )
  64.         {
  65.             RDA = AllocDosObject (DOS_RDARGS, NULL);
  66.  
  67.             if ( ReadArgs ("ConfigFile/A", ArgAry, RDA) )
  68.             {
  69.                 Printf ("Open and read file\n");
  70.  
  71.                 if ( Header = cf_Open ((STRPTR) ArgAry[ARG_FILE],
  72.                         CF_OMODE_OLDFILE | CF_OFLG_READ_TOO, &Error) )
  73.                 {
  74.                     Printf ("Write file\n");
  75.  
  76.                     WMode = (Header->Flags & CF_HFLG_ASCII_FILE)
  77.                                     ? CF_WMODE_ASCII : CF_WMODE_SHORT;
  78.  
  79.                     if ( cf_Write (Header, WMode | CF_WFLG_WRITE_ALWAYS, &Error) )
  80.                     {
  81.                         Printf ("Ok\n");
  82.  
  83.                         Result = RETURN_OK;
  84.                     }
  85.                     else
  86.                     {
  87.                         switch ( Error )
  88.                         {
  89.                             case CF_WERR_ALLOC_WBUFFER:    PrintErr ("No memory for WriteBuffer"); break;
  90.                             default:                                PrintErr ("Unkown write failure"); break;
  91.                         }
  92.                     }
  93.  
  94.                     cf_Close (Header);
  95.                 }
  96.                 else
  97.                 {
  98.                     switch ( Error )
  99.                     {
  100.                         case CF_OERR_OPEN_FILE:        PrintErr ("Couldn't open CF File"); break;
  101.                         case CF_OERR_READ_FILE:        PrintErr ("Couldn't read CF File"); break;
  102.                         case CF_OERR_NO_FORMAT:        PrintErr ("File no CF Format"); break;
  103.                         case CF_OERR_NO_SIZE:        PrintErr ("File has no size"); break;
  104.                         case CF_OERR_HEADER_MEM:    PrintErr ("No memory for Header"); break;
  105.  
  106.                         /* cf_Read() failures */
  107.                         case CF_RERR_FORMAT:            PrintErr ("File has an error in the format structure"); break;
  108.                         case CF_RERR_UNKOWN_ITYPE:    PrintErr ("An unkown item type was found"); break;
  109.  
  110.                         default:                            PrintErr ("Unkown open failure"); break;
  111.                     }
  112.                 }
  113.  
  114.                 FreeArgs (RDA);
  115.             }
  116.             else    PrintErr ("Wrong arguments");
  117.  
  118.             FreeDosObject (DOS_RDARGS, RDA);
  119.             CloseLibrary (CFBase);
  120.         }
  121.         else    PrintErr ("Couldn't open ConfigFile.library V2+");
  122.  
  123.         CloseLibrary (DOSBase);
  124.     }
  125.  
  126.     return (Result);
  127. }
  128.  
  129. VOID PrintErr ( STRPTR String ) { Printf ("ClearUpFile: %ls\n", String); }
  130.